home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #1 / Amiga Plus 1995 #1.iso / fish-disketten / fish_941-950 / d949 / bbbbs / bbbbs65.lha / rexx / bbsSTATS.rexx < prev    next >
OS/2 REXX Batch file  |  1993-09-15  |  11KB  |  431 lines

  1. /* $VER: bbsSTATS.rexx 6.3 © 1993 Richard Lee Stockton (15.9.93)
  2.     - FREELY DISTRIBUTABLE -
  3. */
  4.  
  5. SIGNAL ON BREAK_C
  6. NUMERIC DIGITS 14
  7. CR=''
  8. def=''
  9. pen2=''
  10. pen3=''
  11. lineup=''
  12.  
  13. PARSE ARG name colorflag nonstop emailonline grand grand2 filesonline users .
  14.  
  15. IF colorflag~=1 THEN
  16.   DO
  17.     def=''
  18.     pen2=''
  19.     pen3=''
  20.     lineup=''
  21.   END
  22. IF ADDRESS()='BAUD' THEN
  23.   DO
  24.     CR='0D'x
  25.     lineup='1B'x'M'
  26.   END
  27. IF filesonline='' THEN
  28.   DO
  29.     x=STRIP(GETCLIP('BBS_statsarg'))
  30.     CALL SETCLIP('BBS_statsarg')
  31.     IF x='' THEN
  32.       DO
  33.         filesonline='?'
  34.         IF emailonline='' THEN emailonline='?'
  35.       END
  36.     ELSE PARSE VAR x emailonline grand grand2 filesonline .
  37.   END
  38. IF grand='GRAND' | grand='' THEN grand='?'
  39.  
  40. figarg='s:CONFIG.BBS'
  41. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  42. x=OPEN(f,figarg,'R')
  43. IF x=0 THEN
  44.   DO
  45.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  46.     EXIT 21
  47.   END
  48. lynes.=''
  49. DO i=1 TO 33
  50.   lynes.i=READLN(f)
  51. END
  52. CALL CLOSE(f)
  53.  
  54. compos=POS('/*',lynes.1)
  55. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  56. bbsname = STRIP(lynes.1)
  57. sysop=WORD(lynes.2,1)
  58. bbsdevice=WORD(lynes.4,1)
  59. sysoplevel=WORD(lynes.5,1)
  60. bbspath=WORD(lynes.6,1)
  61. IF ~EXISTS(bbspath) THEN
  62.   DO
  63.     SAY bbspath 'does not exist!'
  64.     EXIT 22
  65.   END
  66. testchar=RIGHT(bbspath,1)
  67. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  68. SYSTEM_SPACE_LIMIT=WORD(lynes.12,1)
  69. IF grand2='GRAND2' | grand2='' THEN
  70.   DO
  71.     grand2=0
  72.     DO i=1 TO 99
  73.       grand2=grand2+countcheck(bbspath'Numbers/LastMessage'i 0)
  74.     END
  75.   END
  76.  
  77. x=OPEN(f,bbspath'Users/'name,'R')
  78. IF x=0 THEN
  79.   DO
  80.     CALL DELAY(150)
  81.     x=OPEN(f,bbspath'Users/'name,'R')
  82.     IF x=0 THEN
  83.       DO
  84.         SAY name 'user file is missing!'
  85.         EXIT 23
  86.       END
  87.   END
  88. data.=''
  89. DO i=1 TO 25
  90.   data.i=READLN(f)
  91. END
  92. CALL CLOSE(f)
  93. lpp=data.7%1
  94. level=data.20%1
  95. lastread.=0
  96.  
  97. IF nonstop='' THEN
  98.   DO
  99.     nonstop=1
  100.     CALL CLOSE(STDOUT)
  101.     CALL OPEN(STDOUT,bbspath'EmailFiles/'name'/Notices/STATS.BBS','W')
  102.   END
  103.  
  104. x=GETCLIP('BBS_'name'_22')
  105. IF x~='' THEN
  106.   DO
  107.     data.22=x
  108.     CALL SETCLIP('BBS_'name'_22')
  109.   END
  110.  
  111. SAY GETCLIP('BBS_copyright')||CR
  112. CALL SETCLIP('BBS_copyright')
  113. prevcaller=GETCLIP('BBS_prevcaller')
  114. IF prevcaller~='' THEN
  115.   DO
  116.     SAY 'The previous'pen3 bbsname def'user was:'CR
  117.     SAY ' 'prevcaller||CR
  118.     SAY '  logged off at:' GETCLIP('BBS_userlogoff')||CR
  119.     SAY pen3'Last disconnect:'def GETCLIP('BBS_disconnect')||CR
  120.   END
  121. SAY CR
  122. day1='01'
  123. IF readopen(bbspath'Numbers/FirstLogon') THEN
  124.   DO
  125.     line=READLN(f)
  126.     CALL CLOSE(f)
  127.     SAY 'The First Logon to'pen3 bbsname def'was' line'.'CR
  128.     PARSE VAR line .' 'day1'-'.
  129.   END
  130. IF day1<10 & LENGTH(day1)<2 THEN day1='0'day1
  131. SAY '     Your sysop is' pen3||sysop||def||CR
  132. SAY CR
  133. usagelist=SHOWDIR(bbspath'Usage','F')
  134. tempnum=FIND(usagelist,'USER.LOG')
  135. IF tempnum>0 THEN usagelist=DELWORD(usagelist,tempnum,1)
  136. usagelist=sortnumbers(usagelist)
  137. SAY pen3'             - Total BBS Usage -'def||CR
  138. DO i=1 TO WORDS(usagelist)
  139.   dateclip=STRIP(WORD(usagelist,i))
  140.   usageclip=countcheck(bbspath'Usage/'dateclip 0)
  141.   usageclp=usageclip%60 usageclip//60
  142.   mtime=30*23*60  /* we guess 1 hour a day for various maintenance */
  143.   IF i=1 THEN
  144.     DO
  145.       mtime=mtime-(day1-1)*23*60
  146.       day1=dateclip||day1
  147.     END
  148.   ELSE IF LEFT(DATE('S'),6)=dateclip THEN mtime=WORD(DATE(),1)*23*60
  149.   dateclip=dateclip'01'
  150.   line=RIGHT(DATE('M',dateclip,'S'),10) WORD(DATE(,dateclip,'S'),3)':'
  151.   line=line RIGHT(WORD(usageclp,1),3) 'hours' RIGHT(WORD(usageclp,2),2)
  152.   line=line 'minutes  = ' RIGHT(((usageclip*100)/mtime+.5)%1,2)'% usage.'
  153.   SAY line||CR
  154.   IF (i+12)//(lpp-3)=0 THEN
  155.     IF waiting2() THEN LEAVE i
  156. END
  157. cmin=countcheck(bbspath'Numbers/Minutes' 0)
  158. chr=cmin%60
  159. cmin=cmin//60
  160. hrz=chr
  161. daz=1
  162. IF hrz<1 THEN hrz=1
  163. IF day1>19900101 THEN
  164.   DO
  165.     daz=1+DATE('I')-DATE('I',day1,'S')
  166.     hrz=daz*24
  167.   END
  168. SAY CR
  169. SAY '     Total Connect Time Since First Logon [all users]:'CR
  170. SAY RIGHT(comma(chr),20) 'hours' RIGHT(cmin,2) 'minutes  = ' RIGHT(((chr*100)/hrz+.5)%1,2)'% usage.'CR
  171. calls=countcheck(bbspath'Numbers/Calls' 0)
  172. IF calls<1 THEN calls=1
  173. SAY RIGHT(comma(calls),20) 'completed calls.' RIGHT(TRUNC((calls/daz)+.05,1),8) 'calls per day.'CR
  174. SAY CR
  175. calz.=''
  176. CALL FileList(bbspath'Numbers/Calls?*',calz,'F','N')
  177. calz.0.0=0
  178. calz.0.1=0
  179. calz.0.2=0
  180. DO i=1 TO calz.0
  181.   calz.i.0=countcheck(bbspath'Numbers/'calz.i 0)
  182.   calz.i.2=SUBSTR(calz.i,6)
  183.   calz.0.0=calz.0.0+calz.i.0
  184.   calz.i.1=countcheck(bbspath'Numbers/Minutes'calz.i.2 0)
  185.   calz.0.1=calz.0.1+calz.i.1
  186. END
  187. SAY LEFT('',19) pen2'baudrate   calls  minutes'def||CR
  188. SAY LEFT('',19) pen2'--------  ------  -------'def||CR
  189. used=''
  190. DO j=1 TO calz.0
  191.   hi=0
  192.   DO i=1 TO calz.0
  193.     IF calz.i.2>calz.hi.2 & FIND(used,calz.i.2)=0 THEN hi=i
  194.   END
  195.   IF hi>0 THEN
  196.     DO
  197.       used=used calz.hi.2
  198.       temp=RIGHT(calz.hi.2,27) RIGHT(TRUNC(((calz.hi.0*100)/calz.0.0+.005),2),7)'%'
  199.       temp=temp                RIGHT(TRUNC(((calz.hi.1*100)/calz.0.1+.005),2),7)'%'
  200.       SAY temp||CR
  201.     END
  202. END
  203. SAY CR
  204. CALL waiting2()
  205. IF waitchar='Q' THEN RETURN
  206. CALL bbsspace(15)
  207. SAY CR
  208. IF extdevs~='' THEN CALL showxdevs()
  209. SAY RIGHT(comma(countcheck(bbspath'Numbers/Bytes.DownLoad' 0)),15) 'bytes  in' RIGHT(comma(countcheck(bbspath'Numbers/Files.DownLoad' 0)),7) 'files downloaded.'CR
  210. SAY CR
  211. SAY RIGHT(comma(countcheck(bbspath'Numbers/Bytes.UpLoad' 0)),15) 'bytes  in' RIGHT(comma(countcheck(bbspath'Numbers/LastFile' 0)),7) 'files uploaded.'CR
  212. IF emailonline<0 THEN CALL countmail()
  213. SAY RIGHT(comma(emailonline),15) 'online of' RIGHT(comma(countcheck(bbspath'Numbers/LastMail' 0)),7) 'private messages.'CR
  214. SAY RIGHT(comma(grand),15) 'online of' RIGHT(comma(grand2),7) 'public messages.'CR
  215. SAY RIGHT(comma(filesonline),15) 'online of' RIGHT(comma(countcheck(bbspath'Numbers/LastFile' 0)),7) 'public files.'CR
  216. IF users<1 THEN users=WORDS(SHOWDIR(bbspath'USERS','F'))
  217. SAY RIGHT(comma(users),15) 'active of' RIGHT(comma(countcheck(bbspath'Numbers/Users' 0)),7) 'user applications.'CR
  218. SAY CR
  219. SAY 'Your access level is 'level'  -  minimum sysop level is' sysoplevel||CR
  220. SAY CR
  221. SAY '  You Have'CR
  222. totmail=WORD(data.17,2)
  223. IF ~DATATYPE(totmail,'W') THEN totmail=0
  224. totmsg=0
  225. DO ti=1 TO level
  226.   temp=WORD(data.23,ti)
  227.   IF DATATYPE(temp,'W') THEN totmsg=totmsg+WORD(data.23,ti)
  228. END
  229. SAY '   Written' RIGHT(comma(totmsg),14)'  public &' RIGHT(comma(totmail),8)'  private messages.'CR
  230. totfiles=WORD(data.14,1)
  231. IF ~DATATYPE(totfiles,'W') THEN totfiles=0
  232. totbytes=WORD(data.14,3)
  233. IF ~DATATYPE(totbytes,'W') THEN totbytes=0
  234. SAY '  Uploaded' RIGHT(comma(totbytes),14)'  bytes in' RIGHT(comma(totfiles),8)'  files.'CR
  235. totfiles=WORD(data.15,1)
  236. IF ~DATATYPE(totfiles,'W') THEN totfiles=0
  237. totbytes=WORD(data.15,3)
  238. IF ~DATATYPE(totbytes,'W') THEN totbytes=0
  239. SAY 'Downloaded' RIGHT(comma(totbytes),14)'  bytes in' RIGHT(comma(totfiles),8)'  files.'CR
  240. PARSE VAR data.19 dhour' hours 'dmin' minutes in 'calls .
  241. IF ~DATATYPE(dhour,'W') THEN dhour=0
  242. IF ~DATATYPE(dmin,'W') THEN dmin=0
  243. IF ~DATATYPE(calls,'W') THEN calls=0
  244. SAY '..and been on' bbsname dhour 'hours' dmin+TIME('E')%60 'minutes in' calls+1 'calls.'CR
  245.  
  246. BREAK_C:
  247. EXIT
  248.  
  249.  
  250. waiting2:
  251. IF nonstop=1 THEN RETURN 0
  252. waitchar=getinput(1 1 pen3'   Q=Quit   N=Non-Stop   RETURN=Continue  'def)
  253. IF waitchar='N' THEN
  254.   DO
  255.     nonstop=1
  256.     waitchar=''
  257.   END
  258. CALL cleanline(1)
  259. IF waitchar='Q' THEN RETURN 1
  260. RETURN 0
  261.  
  262.  
  263. cleanline:
  264. ARG lflag .
  265. IF colorflag~=1 & lflag=1 THEN RETURN
  266. cline=lineup||LEFT(' ',78)
  267. IF lflag=1 THEN cline=cline||lineup
  268. SAY cline||CR
  269. RETURN
  270.  
  271.  
  272. getinput:
  273. PARSE ARG upflag' 'oneflag' 'pline
  274. OPTIONS PROMPT pline
  275. PARSE PULL inarg
  276. inarg=STRIP(inarg)
  277. IF upflag THEN inarg=UPPER(inarg)
  278. IF oneflag THEN inarg=LEFT(inarg,1)
  279. RETURN inarg
  280.  
  281.  
  282. countcheck:
  283. PARSE ARG fname' 'cknum' '.
  284. IF ~EXISTS(fname) THEN
  285.   DO
  286.     IF cknum=0 THEN RETURN 0
  287.     IF ~writeopen(fname) THEN RETURN 0
  288.     CALL WRITELN(f,cknum)
  289.     CALL CLOSE(f)
  290.     RETURN cknum
  291.   END
  292. IF ~readopen(fname) THEN RETURN cknum
  293. retval=STRIP(READLN(f))
  294. CALL CLOSE(f)
  295. IF ~DATATYPE(retval,'W') THEN retval=0
  296. IF ~DATATYPE(cknum,'W') THEN cknum=0
  297. IF retval<cknum THEN
  298.   DO
  299.     IF writeopen(fname) THEN
  300.       DO
  301.         CALL WRITELN(f,cknum)
  302.         CALL CLOSE(f)
  303.         RETURN cknum
  304.       END
  305.   END
  306. RETURN retval
  307.  
  308.  
  309. readopen:
  310. PARSE ARG fname
  311. ok=OPEN(f,fname,'R')
  312. IF ok~=0 THEN RETURN 1
  313. SAY fname 'failed to open for reading!'CR
  314. RETURN 0
  315.  
  316.  
  317. writeopen:
  318. PARSE ARG fname
  319. CALL CLOSE(f)
  320. ok=OPEN(f,fname,'W')
  321. IF ok~=0 THEN RETURN 1
  322. SAY fname 'failed to open for writing!'CR
  323. RETURN 0
  324.  
  325.  
  326. comma:
  327. ARG num .
  328. dgt=LENGTH(num)
  329. numtext=''
  330. IF dgt>3 THEN numtext=','RIGHT(num,3)
  331. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  332. IF dgt>9 THEN numtext=','LEFT(RIGHT(num,9),3)||numtext
  333. IF dgt>12 THEN
  334.   DO
  335.     numtext=','LEFT(RIGHT(num,12),3)||numtext
  336.     numtext=LEFT(num,dgt-12)||numtext
  337.   END
  338. ELSE IF dgt>9 THEN numtext=LEFT(num,dgt-9)||numtext
  339. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  340. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  341. ELSE numtext=num
  342. RETURN numtext
  343.  
  344.  
  345. sortnumbers:
  346. PARSE ARG slist
  347. IF STRIP(slist)='' THEN RETURN ''
  348. sorted.=''
  349. oldest=999999
  350. newest=0
  351. newlist=''
  352. DO si=1 TO WORDS(slist)
  353.   testword=WORD(slist,si)
  354.   IF ~DATATYPE(testword,'W') THEN
  355.     DO
  356.       testpos=LASTPOS('.',testword)
  357.       IF testpos>0 THEN tempnum=SUBSTR(testword,testpos+1)
  358.       ELSE
  359.         DO
  360.           newlist=testword newlist
  361.           ITERATE si
  362.         END
  363.     END
  364.   ELSE tempnum=testword/1
  365.   IF sorted.tempnum='' THEN
  366.     DO
  367.       sorted.tempnum=testword
  368.       sorted.tempnum.0=1
  369.       IF DATATYPE(tempnum,'W') THEN
  370.         DO
  371.           IF tempnum>newest THEN newest=tempnum
  372.           IF tempnum<oldest THEN oldest=tempnum
  373.         END
  374.     END
  375.   ELSE newlist=newlist testword
  376. END
  377. IF oldest~=999999 & newest~=0 THEN
  378.   DO si=oldest TO newest
  379.     IF sorted.si.0=1 THEN newlist=newlist sorted.si
  380.   END
  381. DROP sorted. oldest newest
  382. RETURN STRIP(newlist)
  383.  
  384.  
  385. bbsspace:
  386. ARG tabspace .
  387. ADDRESS COMMAND 'C:info >ram:infout' bbsdevice
  388. ok=OPEN(f,'ram:infout','R')
  389. IF ok=0 THEN RETURN 20
  390. line=READLN(f)
  391. line=READLN(f)
  392. line=READLN(f)
  393. line=READLN(f)
  394. CALL CLOSE(f)
  395. IF tabspace<14 THEN SAY CR
  396. bbsk=WORD(line,4)
  397. IF ~DATATYPE(bbsk,'N') THEN
  398.   DO
  399.     line=bbsdevice 'is not an info compatible device!'
  400.     SAY pen3||line||def||CR
  401.     bbsk=0
  402.     RETURN
  403.   END
  404. bbsk=bbsk*512-SYSTEM_SPACE_LIMIT
  405. IF bbsk<1 THEN bbsk=0
  406. SAY RIGHT(comma(bbsk),tabspace) 'bytes available for uploads.'CR
  407. RETURN
  408.  
  409.  
  410. showxdevs: PROCEDURE EXPOSE bbspath pen3 def CR 
  411. CALL FileList(bbspath'Numbers/Files.X.*',xfiles,'F','N')
  412. IF xfiles.0>1 THEN CALL QSORT(1,xfiles.0,xfiles)
  413. DO i=1 TO xfiles.0
  414.   ii=LASTPOS('FILES.X.',UPPER(xfiles.i))+8
  415.   temp=SUBSTR(xfiles.i,ii)
  416.   SAY RIGHT(comma(countcheck(bbspath'Numbers/Bytes.X.'temp 0)),15) 'bytes  in' RIGHT(comma(countcheck(bbspath'Numbers/Files.X.'temp 0)),7)' files downloaded from' pen3||temp||def||CR
  417. END
  418. SAY LEFT('-',74,'-')||CR
  419. RETURN
  420.  
  421.  
  422. countmail:
  423. SAY '   Counting online email...'lineup||CR
  424. emailonline=0
  425. DO ti=1 TO WORDS(userlist)
  426.   emailonline=emailonline+WORDS(SHOWDIR(bbspath'Email/'WORD(userlist,ti)))
  427. END
  428. RETURN
  429.  
  430. /* bbsSTATS.rexx */
  431.